﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSysWeb;
using System.Data.SqlClient;
using System.Data;

namespace DAL_MechSysWeb
{
    public class DALMensagem : DALBase
    {
        private DTOMensagem CriarMensagem(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOMensagem dtoMensagem = new DTOMensagem();

                if (!string.IsNullOrEmpty(sqlDataReader["MensagemID"].ToString()))
                {
                    dtoMensagem.MensagemID = (int)sqlDataReader["MensagemID"];
                }
                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoMensagem.ClienteID = (int)sqlDataReader["ClienteID"];
                }               
                if (!string.IsNullOrEmpty(sqlDataReader["Titulo"].ToString()))
                {
                    dtoMensagem.Titulo = (string)(sqlDataReader["Titulo"].ToString());
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Assunto"].ToString()))
                {
                    dtoMensagem.Assunto = (string)sqlDataReader["Assunto"];
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Texto"].ToString()))
                {
                    dtoMensagem.Texto = (string)sqlDataReader["Texto"];
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Remetente"].ToString()))
                {
                    dtoMensagem.Remetente = (string)sqlDataReader["Remetente"];
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Status"].ToString()))
                {
                    dtoMensagem.Status = bool.Parse(sqlDataReader["Status"].ToString());
                }

                return dtoMensagem;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void AtualizarStatus(int mensagemID, bool status)
        {
            try
            {
                string storedProssidere = "sp_Web_AtualizarMensagemStatus";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@mensagemID", mensagemID), 
                           new SqlParameter("@status", status)        
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int mensagemID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirMensagem";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@mensagemid", mensagemID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }     

        public List<DTOMensagem> BuscarMensagensPorClienteID(int registroInicio, int tamanhoPagina, string tipo, int clienteID)
        {
            List<DTOMensagem> lstMensagens = new List<DTOMensagem>();

            DataTable dataTable = new DataTable();

            try
            {
                string query = @"SELECT MensagemID, ClienteID, Assunto, Texto, Titulo, Remetente, Status 
                                FROM Mensagem WHERE ClienteID = "+clienteID;

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTOMensagem dtoMensagem = new DTOMensagem();

                            if (!dataTable.Rows[i].IsNull("MensagemID"))
                            {
                                dtoMensagem.MensagemID = (int)dataTable.Rows[i]["MensagemID"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteID"))
                            {
                                dtoMensagem.ClienteID = (int)dataTable.Rows[i]["ClienteID"];
                            }
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoMensagem.Titulo = (string)(dataTable.Rows[i]["Titulo"]);
                            }
                            if (!dataTable.Rows[i].IsNull("Assunto"))
                            {
                                dtoMensagem.Assunto = (string)dataTable.Rows[i]["Assunto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Texto"))
                            {
                                dtoMensagem.Texto = (string)dataTable.Rows[i]["Texto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Remetente"))
                            {
                                dtoMensagem.Remetente = (string)dataTable.Rows[i]["Remetente"];
                            }
                            if (!dataTable.Rows[i].IsNull("Status"))
                            {
                                dtoMensagem.Status = bool.Parse(dataTable.Rows[i]["Status"].ToString());
                            }

                            lstMensagens.Add(dtoMensagem);
                        }

                    }
                    sqlConnection.Close();
                }

            }
            catch (SqlException)
            {

            }
            return lstMensagens;
        }

        public List<DTOMensagem> BuscarMensagensPorClienteIDeStatus(int registroInicio, int tamanhoPagina, string tipo, int clienteID, string status)
        {
            List<DTOMensagem> lstMensagens = new List<DTOMensagem>();

            DataTable dataTable = new DataTable();

            try
            {
                string query = "SELECT MensagemID, ClienteID, Assunto, Texto, Titulo, Remetente, Status FROM Mensagem WHERE ClienteID = "+clienteID+" AND Status = '"+status+"'";

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTOMensagem dtoMensagem = new DTOMensagem();

                            if (!dataTable.Rows[i].IsNull("MensagemID"))
                            {
                                dtoMensagem.MensagemID = (int)dataTable.Rows[i]["MensagemID"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteID"))
                            {
                                dtoMensagem.ClienteID = (int)dataTable.Rows[i]["ClienteID"];
                            }
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoMensagem.Titulo = (string)(dataTable.Rows[i]["Titulo"]);
                            }
                            if (!dataTable.Rows[i].IsNull("Assunto"))
                            {
                                dtoMensagem.Assunto = (string)dataTable.Rows[i]["Assunto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Texto"))
                            {
                                dtoMensagem.Texto = (string)dataTable.Rows[i]["Texto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Remetente"))
                            {
                                dtoMensagem.Remetente = (string)dataTable.Rows[i]["Remetente"];
                            }
                            if (!dataTable.Rows[i].IsNull("Status"))
                            {
                                dtoMensagem.Status = bool.Parse(dataTable.Rows[i]["Status"].ToString());
                            }

                            lstMensagens.Add(dtoMensagem);
                        }

                    }
                    sqlConnection.Close();
                }

            }
            catch (SqlException)
            {

            }
            return lstMensagens;
        }

        public List<DTOMensagem> BuscarMensagensPorClienteIDePesquisa(int registroInicio, int tamanhoPagina, string tipo, int clienteID, string descricao)
        {
            List<DTOMensagem> lstMensagens = new List<DTOMensagem>();

            DataTable dataTable = new DataTable();

            try
            {
                string query = string.Format("SELECT MensagemID, ClienteID, Assunto, Texto, Titulo, Remetente, Status FROM Mensagem WHERE ClienteID = {0} AND Titulo Like %{1}%", clienteID, descricao);

                using (SqlConnection sqlConnection = new SqlConnection(connectionString))
                {
                    sqlConnection.Open();
                    using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
                    {
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
                        sqlDataAdapter.SelectCommand = sqlCommand;

                        sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);

                        //Tratando o fim da navegação
                        if (tipo == "proximo" && dataTable.Rows.Count == 0 && registroInicio > 0)
                        {
                            registroInicio -= tamanhoPagina;
                            sqlDataAdapter.Fill(registroInicio, tamanhoPagina, dataTable);
                        }
                        for (int i = 0; i < dataTable.Rows.Count; i++)
                        {
                            DTOMensagem dtoMensagem = new DTOMensagem();

                            if (!dataTable.Rows[i].IsNull("MensagemID"))
                            {
                                dtoMensagem.MensagemID = (int)dataTable.Rows[i]["MensagemID"];
                            }
                            if (!dataTable.Rows[i].IsNull("ClienteID"))
                            {
                                dtoMensagem.ClienteID = (int)dataTable.Rows[i]["ClienteID"];
                            }
                            if (!dataTable.Rows[i].IsNull("Titulo"))
                            {
                                dtoMensagem.Titulo = (string)(dataTable.Rows[i]["Titulo"]);
                            }
                            if (!dataTable.Rows[i].IsNull("Assunto"))
                            {
                                dtoMensagem.Assunto = (string)dataTable.Rows[i]["Assunto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Texto"))
                            {
                                dtoMensagem.Texto = (string)dataTable.Rows[i]["Texto"];
                            }
                            if (!dataTable.Rows[i].IsNull("Remetente"))
                            {
                                dtoMensagem.Remetente = (string)dataTable.Rows[i]["Remetente"];
                            }
                            if (!dataTable.Rows[i].IsNull("Status"))
                            {
                                dtoMensagem.Status = bool.Parse(dataTable.Rows[i]["Status"].ToString());
                            }

                            lstMensagens.Add(dtoMensagem);
                        }

                    }
                    sqlConnection.Close();
                }

            }
            catch (SqlException)
            {

            }
            return lstMensagens;
        }

        public DTOMensagem BuscarMensagemPorMensagemID(int mensagemID)
        {
            DTOMensagem dtoMensagem = null;

            try
            {
                string storedProssidere = "sp_Web_BuscarMensagemPorMensagemID";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@mensagemID", mensagemID)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dtoMensagem = CriarMensagem(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoMensagem;

        }


        public int BuscarNumMensagensNãoLidas(int clienteID)
        {
            int numMensagens = 0;

            try
            {
                string storedProssidere = "sp_Web_BuscarNumMensagensNaoLidas";

                SqlParameter[] parameters =
            {
                new SqlParameter("@clienteID", clienteID)               
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        numMensagens = Int32.Parse(sqlDataReader["NumRegistros"].ToString());
                    }
                }

                return numMensagens;

            }
            catch (Exception)
            {
                throw;
            }
        }


    }
}
